/**hghgkk
 * @file afd.h     
 * @author Michel Meynard
 * @brief Définition d'un AFD
 */
#define EINIT 0
#define EA 1
#define EAB 2
#define EABC 3
#define EB 4
#define EBD 5

#define EI 6
#define EIF 7
#define EID 8     // identificateur
#define ECHIFFRE 9
#define NBETAT 100

int TRANS[NBETAT][256];		/* table de transition : état suivant */
int JETON[NBETAT];		/* jeton à retourner */ // PERMET D'IDENTIFIER LES ETATS FINAUX. !=0

/**
 * construit un ensemble de transitions de ed à ef pour un intervalle de char
 * @param ed l'etat de depart 
 * @param ef l'etat final 
 * @param cd char de debut 
 * @param cf char de fin 
 */
 void classe(int ed,int cd, int cf, int ef){
 	for (int i=cd;i<cf;i++)
 		TRANS[ed][i] = ef;
 		
 		//JETON[ef] = 300+EA;
 }


int creerAfd(){			/* Construction de l'AFD */
  int i;int j;			/* variables locales */
  for (i=0;i<NBETAT;i++){
    for(j=0;j<256;j++) TRANS[i][j]=-1; /* init vide */
    JETON[i]=0;			/* init tous états non finaux */
  
  	classe(EINIT, 'a', 'z', EID);
  	classe(EINIT, 'A', 'Z', EID);
 	classe(EID, 'A', 'Z', EID);
 	classe(EINIT, '0', '9', ECHIFFRE);
  	classe(ECHIFFRE, '0', '9', ECHIFFRE);
 	
 	
  }
  /* Transitions de l'AFD */
  TRANS[EINIT]['a']=EA;TRANS[EA]['b']=EAB;TRANS[EAB]['b']=EAB;
  TRANS[EAB]['c']=EABC;TRANS[EINIT]['b']=EB;TRANS[EB]['d']=EBD;
  TRANS[EINIT]['i']=EI; TRANS[EI]['f']=EIF;
  
  JETON[EA]=JETON[EABC]=1;
  JETON[EBD]=-1; /* états finaux */
  JETON[EIF]=300 + EIF;
  JETON[EI]=300 + EID;
  JETON[ECHIFFRE]=300 + ECHIFFRE; 
  
  // si le jeton est reconnu il retourn un jeton > 300. sinon il retourn son code ASCII
  
  
  
}
